//高精度×低精度
//把低精度所有位当成1位来算
//针对0的情况,可以去除前导0或者特判
#include<iostream>
#include<string>
#include<vector>
#include <algorithm>
using namespace std;
vector<int >mcl(string&a,int&b){
    if(a=="0"||b==0)
        return vector<int>{0};
    vector<int>res;
    int i=a.size()-1;
    int t=0;
    while(i>=0){
        //运算 后加上 上一次的进位
        int m=(a[i--]-'0')*b+t;
        //保存这一位的结果
        res.push_back(m%10);
        //保存进位
        t=m/10;
    }
    //处理所有进位
    while(t){
        res.push_back(t%10);
        t/=10;
    }
    return res;
}
//高精度×高精度
//遍历,每一位累加起来,再统一计算进位
vector<int >MCL(string&a,string&b){
    if(a=="0"||b=="0")
        return vector<int>{0};
    //计算每一位
    vector<int>res(a.size()+b.size()+7);
    for(int i=b.size()-1;i>=0;i--){
        int k=b.size()-1-i;
        for(int j=a.size()-1;j>=0;j--){
            res[k++]+=(a[j]-'0')*(b[i]-'0');
        }
    }
    //处理所有进位
    int t=0;
    for(auto&e:res){
        e+=t;
        t=e/10;
        e%=10;
    }
    //去除前导0
    for(int i=res.size()-1;i>0;i--){
        if(res[i])
            break;
        res.pop_back();
    }
    //逆序成大端
    reverse(res.begin(),res.end());
    return res;
}
int main(){
    string a;
    string b;
    cin>>a>>b;
    vector<int>res(MCL(a,b));
    int i=0;
    while(i<res.size())
        cout<<res[i++];
    return 0;
}